module.exports = function () {
  return async (ctx, next) => {
    /**
     * 封装返回数据格式
     * @param {Object} data 返回的数据主题
     * @param {String} successMsg 请求成功提示信息
     * @param {*} failMsg 请求失败提示信息
     */
    ctx.app.context.send = function (data, successMsg, failMsg) {
      if (data) {
        this.success(data, successMsg)
      } else {
        this.fail(data, failMsg)
      }
    }
  
    /**
     * 封装请求成功的返回数据格式
     * @param {Object} data 返回的数据主题
     * @param {String} message 提示信息
     */
    ctx.app.context.success = function (data, message = '操作成功') {
      this.response.body = {
        data,
        success: true,
        message,
        status: 200
      }
    }
  
    /**
     * 封装请求失败的返回数据格式
     * @param {Object} data 返回的数据主题
     * @param {String} message 提示信息
     */
    ctx.app.context.fail = function (data, message = '操作失败') {
      this.response.body = {
        data,
        success: false,
        message,
        status: 400
      }
    }
  
    await next()
  }  
}